/*
  Programa GEFE - Gestión de eventos lúdicos.
  Copyright (C) 2010  Antonio Ramírez Marti

  This program is free software: you can redistribute it and/or modify
  it under the terms of the GNU General Public License as published by
  the Free Software Foundation, either version 3 of the License, or
  (at your option) any later version.

  This program is distributed in the hope that it will be useful,
  but WITHOUT ANY WARRANTY; without even the implied warranty of
  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  GNU General Public License for more details.

  You should have received a copy of the GNU General Public License
  along with this program.  If not, see <http://www.gnu.org/licenses/>.
*/

#ifndef ACOLITOHABITACIONES_H
#define ACOLITOHABITACIONES_H

#include <QWidget>
#include <QDataWidgetMapper>
#include <QSqlQueryModel>
#include <QSortFilterProxyModel>

#include <modelohabitaciones.h>

namespace Ui {
    class AcolitoHabitaciones;
}

class AcolitoHabitaciones : public QWidget {
    Q_OBJECT

    Q_PROPERTY(bool conexion READ isConectado WRITE setConectado);
    Q_PROPERTY(QString filtrado READ getFiltro WRITE setFiltro)
public:
    AcolitoHabitaciones(QWidget *parent = 0);
    ~AcolitoHabitaciones();

    /*!
      Devuelve el filtro para grupos empleado
      @return QString, filtro empleado
      @note No modifica el objeto
      */

    QString getFiltro() const;

    /*!
      Devuelve el estado de conexion del acolito
      @return bool
      - @b TRUE: Conectado
      - @b FALSE: Desconectado
      @note No modifica el objeto
      */

    bool isConectado() const;

public slots:

    /*!
      Conecta o desconecta el acolito
      @param estado Estado de conexion del acolito
      - @b TRUE: Conecta el acolito
      - @b FALSE: Desconecta el acolito
      @note Modifica el objeto
      */

    void setConectado(bool estado);

    /*!
      Establece el filtro del acolito
      */

    void setFiltro(QString filtro);

    /*!
      Recarga los modelos
      */

    void reloadModelos();

protected:
    void changeEvent(QEvent *e);

private:
    Ui::AcolitoHabitaciones *ui;

    bool flagConexion;  ///< Bandera de estado de conexion
    QString codigoFiltrado; ///< Codigo de filtrado de grupos

    ModeloHabitaciones *modelo; ///< Modelo de habitaciones del acolito
    QDataWidgetMapper *mapper;  ///< Mapeador entre el modelo de habitaciones y la interfaz del acolito

    QSqlQueryModel *modeloGrupos;   ///< Modelo de grupos alojados en las distintas habitaciones
    QSortFilterProxyModel *filtroGrupos;  ///< Filtrado para los grupos

private:

    /*!
      Prepara el acolito
      */

    void setup();

private slots:

    /*!
      Crea los modelos del acolito
      */

    void creaModelos();

    /*!
      Conecta los modelos del acolito
      */

    void conectaModelos();

    /*!
      Destruye los modelos del acolito
      */

    void destruyeModelos();

    /*!
      Prepara la interfaz del acolito
      */

    void preparaInterfaz();

};

#endif // ACOLITOHABITACIONES_H
